/*
 * parser.h
 *
 *  Created on: Jun 25, 2013
 *      Author: koldar
 */

#ifndef PARSER_H_
#define PARSER_H_

#include "parser-tools.h"
#include "graph.h"

/**effettua il parsing di un file contenente un grafo. La BNF di un file sintatticamente corretto e' la seguente:
 *
 *	<table>
 *	 <tr>
 *	  <th>definizione regolare</th>
 *	  <th>produzioni</th>
 *	 </tr>
 *	 <tr>
 *	  <th>program</th>
 *	  <th>{stat}<SUP>+</SUP></th>
 *	 </tr>
 *	 <tr>
 *	  <th>stat</th>
 *	  <th>numberstat|capacity|timelistofedges|depot</th>
 *	 </tr>
 *	 <tr>
 *	  <th>numberstat</th>
 *	  <th><b>NUMBER</b> number|<b>NUMBER</b>numberof</th>
 *	 </tr>
 *	 <tr>
 *	  <th>number</th>
 *	  <th>: <b>filename</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>numberof</th>
 *	  <th><b>OF</b> numberofveritices|<b>OF </b>numberofedges</th>
 *	 </tr>
 *	 <tr>
 *	  <th>numberofvertices</th>
 *	  <th><b>VERTICES</b> : <b>intconst</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>numberofedges</th>
 *	  <th><b>EDGES</b> : <b>intconst</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>capacity</th>
 *	  <th><b>CAPACITY</b> :  <b>intconst</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>time</th>
 *	  <th><b>TIME</b> :  <b>intconst</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>listofedges</th>
 *	  <th><b>LIST</b> <b>OF</b> <b>EDGES</b> : edgelist</th>
 *	 </tr>
 *	 <tr>
 *	  <th>depot</th>
 *	  <th><b>DEPOT</b> :  <b>intconst</b></th>
 *	 </tr>
 *	 <tr>
 *	  <th>edgelist</th>
 *	  <th>{edgedef}<SUP>+</SUP></th>
 *	 </tr>
 *	 <tr>
 *	  <th>edgedef</th>
 *	  <th>( <b>intconst</b> , <b>intconst</b> ) <b>COST</b>  <b>intconst</b> <b>DEMAND</b> <b>intconst</b> <b>PROFIT</b> <b>floatconst</b></th>
 *	 </tr>
 *	</table>
 *
 * \pre
 *  \li file esistente ed aperto in lettura
 *  \li file non NULL
 *  \li _N non NULL
 *  \li file e' sintatticamente corretto
 * \post
 *  \li viene allocato in memoria un'istanza di Graph
 *
 * @param file il file in cui sono contenuti i dati del grafo
 * @param _N una cella di memoria in cui inserire il numero dei vertici del grafo stesso
 * @return un puntatore che indica un'istanza di Graph in memoria
 */
Pgraph parseGraph(FILE* file,int* _N);

#endif /* PARSER_H_ */
